叠加分析 Sample详情

最后更新时间:2020年12月11日

叠加分析是地理信息系统最常用的提取空间隐含信息的手段之一。该方法源于传统的透明材料叠加,即将来自不同的数据源的图纸绘于透明纸上,在透光桌上将其叠放在一起,然后用笔勾出感兴趣的部分或提取出感兴趣的信息。

地理信息系统的叠加分析是将有关主题层组成的数据层面进行叠加,产生一个新的数据层面的操作,其结果是原来的要素被分割、剪断、套合,然后生成新的要素,新要素综合了原来两层要素所具有的属性。也就是说,空间叠加,不仅产生新的空间特征,还将实体的属性联接起来,产生新的属性。借助叠加分析可以进行空间数据相交、求并、相减等多种空间分析操作。

在此,主要介绍针对几何要素的叠加分析计算。空间叠加分析涉及到一系列的运算,现将叠加运算总结为以下五种类型:点对区运算、线对区运算、区对区运算、点对线运算、区对点运算。每种类型对应一定的逻辑运算,生成的结果也不尽相同,如下表所示:

分析类型 叠加分析功能 结果
点对区 相交、相减 点简单要素类
线对区 相交、相减、求并、判别 线简单要素类
区对区 相交、相减、求并、判别、对称差 区简单要素类
点对线 相交 点简单要素类
区对点 相交、相减 区简单要素类

下方图片以区和区的叠加分析展示了求交、求并、相减、求对称差的功能作用。

求交.png 求并.png 相减.png 对称差.png

针对几何要素的空间关系分析计算,主要通过API程序包com.zondy.mapgis.geometry下的GeometryOperator类接口实现:

接口 说明
GeometryOperator.equals() 相同
GeometryOperator.crosses() 穿越相交
GeometryOperator.contains() 包含
GeometryOperator.covers() 覆盖
GeometryOperator.coveredBy() 被覆盖
GeometryOperator.disjoint() 相离
GeometryOperator.intersects() 相交
GeometryOperator.touches() 相接
GeometryOperator.difference() 求差
GeometryOperator.intersection() 求交
GeometryOperator.symDifference() 求对称差
GeometryOperator.union() 求并
GeometryOperator.within() 点在区内


在进行以下空间逻辑运算之前,首先需要根据对应的接口准备待分析的几何对象。类似缓冲分析中几何对象的获取方法,可以通过地图要素查询从Feature中获取Geometry;也可以先绘制图形,然后转换为Geometry;还可以直接根据坐标数据构建Geometry。其中查询方式最常用。在此不展开讲述,可以参考缓冲分析部分的文档。

具体实现方法如下:

1 求交

即求两个数据集的交集的操作,两个数据集中相交的部分被保存到结果数据集中,其余部分被排除。

        // 两个区几何要素求交得到交集
        Geometry geoIntersection = GeometryOperator.intersection(geometryA, geometryB, mTolerance);

求交.png

2 求并

求两个数据集的并集的操作,用“输入几何对象”将“被求并几何对象”打散,分开为多个元素,然后将所有要素信息全部记录到结果数据中。简单地说,如果求并的是两个有相交区域的区要素,结果为3个图元:相交部分、裁剪掉相交区域的原始两图元。

        // 两个区几何要素求并得到并集
        Geometry geometryUnion = GeometryOperator.union(geoPolygonA, geoPolygonaB, mTolerance);

求并.png

3 求差(相减)

相减,即从几何对象A中“减去”与几何对象B相重叠的部分。

        // 两个几何对象求差值
        Geometry geoDifference = GeometryOperator.difference(geometryA, geometryB, mTolerance);

相减.png

4 对称差

对称差即获取数据集A与叠加数据集B相交图元以外的部分。

        // 两个几何对象求对称差
        Geometry geoSymmetricDifference = GeometryOperator.symDifference(geometryA, geometryB, mTolerance);

对称差.png

5 分割

分割操作,只能用线对象对区或线几何对象进行分割。

        // 分割区(画线分割区)
        ArrayList  geoSplit = new ArrayList();
        GeometryOperator.splitPolygonByLine(geometryB, (GeoLine) geometryA, mTolerance, geoSplit);

分割.png

6 合并

与求并操作不同的是,合并是将两个对象合并为一个对象。

        // 合并两个几何对象
        Geometry geoMerge = GeometryOperator.dissolve(geometryA, geometryB, mTolerance);

合并.png

说明:上述的针对要素的各种空间叠加分析计算,都是对两个几何对象的操作,接口中需要传入两个几何对象,其中第一个参数的对象表示被分析的对象,第二个参数是用来分析的对象。例如相减difference接口中第一个几何对象是被“减去”的,第二个是用来执行“减去”操作的对象。